#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <nlohmann/json.hpp>

using namespace std;
using json=nlohmann::json;

//g++ -o mysql.out mysql.cpp  -L/usr/lib64/mysql/ -lmysqlclient

bool myconnect(MYSQL* connect)
{
	if(!mysql_real_connect(connect,"127.0.0.1","127.0.0.1","bn3xMKbZB58rTCLj","127.0.0.1",3306,NULL,0)){
        return false;
    }else{
    	return true;
    }
}

string select(const char* sql)
{
	MYSQL connect;
    MYSQL_RES *res;
    MYSQL_ROW  row;
    json data;

    //连接
    mysql_init(&connect);
    //连接到数据库库
    
    bool b=myconnect(&connect);
    if(!b)
    {
    	exit(1);
    }
    //设置字符集
    mysql_query(&connect,"set names utf-8");

    //查询
    
    if(mysql_query(&connect,sql)){
        cout<< "错误信息:" <<mysql_error(&connect) << endl;
        exit(1);
    }

    //结果集
    res = mysql_use_result(&connect);

    int p=0;
    while ((row=mysql_fetch_row(res))!=NULL)
    {
    	for (int i = 0; i < mysql_num_fields(res); i++)
    	{
    		data[p][i]=row[i];
    	}
    	p++;
    }
    string tojson=data.dump(4);
    //释放资源并关闭连接
    mysql_free_result(res);
    mysql_close(&connect);
    return tojson;
}

void doSql(const char* sql)
{
	MYSQL connect;
    MYSQL_RES *res;
    MYSQL_ROW  row;
    json data;

    //连接
    mysql_init(&connect);
    //连接到数据库库
    
    bool b=myconnect(&connect);
    if(!b)
    {
    	exit(1);
    }
    if(mysql_query(&connect,sql)){
        cout<< "错误信息:" <<mysql_error(&connect) << endl;
        exit(1);
    }
}

int main(int argc, char const *argv[])
{
	const char* sql="select * from log";
	string s=select(sql);
	cout << s;
	sql="update log set pid=1 where id=1";
	doSql(sql);

	sql="insert into log set pid=1,log=\"hhhh\",time=666,status=1";
	doSql(sql);

	sql="delete from log where id=3";
	doSql(sql);

	return 0;
}